package com.zy.filter;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpFilter;
import java.io.IOException;


/**
 * @Author CarreyZhou
 * @Date: 2024/5/6 14:06
 * 自定义过滤器，
 * 1.实现Filter类
 * 2.或者继承HttpFilter,这个时经过封装的，如果要在filter初始化或销毁的时候做一些操作，就实现Filter
 * 3.请求转发不会触发过滤器，因为请求转发发生在服务器内部
 * 4.重定向会触发过滤器，重定向是返回给浏览器，浏览器重新发起的一次请求
 *
 * 两种方式使Filter生效（实际中选一种，不然容易混乱）
 * 1.通过bean注入，FilterRegistrationBean
 * 2.通过WebFilter注解配置，然后springboot包扫描到Filter类，自动注册到容器中
 *    1.创建自定义filter类，继承HttpFilter类或者实现Filter接口
 *    2.使用@WebFilter注解配置filter，指定urlPatterns等属性
 *    3.在spring boot启动类上加上@ServletComponentScan注解，让springboot扫描到Filter类
 *
 */
@Slf4j
public class WebCustomerFilter extends HttpFilter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info("WebCustomerFilter doFilter request");
        chain.doFilter(request, response);
        log.info("WebCustomerFilter doFilter response");
    }
}
